IICS CDIでAssume Roleを用いて異なるAWSアカウントのS3バケットに書き込んでみた。
はじめに
好物はインフラとフロントエンドのかじわらゆたかです。 Informatica Intelligent Cloud Services(IICS) CDIで異なるAWSアカウントのS3バケットに書き込んで見たいと思います。 もちろんAccessKeyとSecretAccessKeyを払い出すというやり方はありますが、AWSのベストプラクティスに基づきIAM RoleとAssume Roleを用いた構成になります。
構成図
構成は上記となります。 SecureAgentが入っているAWSアカウントとそれとは別のAWSアカウントのS3にAssume Roleをして参照・書き込みをしたいと思います。 Assume元のアカウントをSource Account、Assume先のアカウントをTarget Accountと呼んでいます。
Target Account側の設定 - 1
Target Account側のIAM RoleにはS3の操作をできるPolicyを付与します。 クロスアカウントの設定となるので、操作対象のバケットのみを操作できるポリシーが良いかと思います。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::{target-account-bucket-name}", "arn:aws:s3:::{target-account-bucket-name}/*" ] } ] }
上記で作ったIAM Roleを仮に以下とします。
arn:aws:iam::210987654321:role/target-role
Source Account側の設定
SecureAgentを入れているEC2に以下のPolicyを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::210987654321:role/target-role" } ] }
上記で作ったIAM Roleを仮に以下とします。
arn:aws:iam::123456789012:role/source-role
Target Account側の設定 - 2
Target Account側にSource Account側のIAM RoleからAssumeできるように先程作ったIAM Roleの信頼関係に以下を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/source-role" }, "Action": "sts:AssumeRole" } ] }
IICS CDIの設定
IICS CDI上から接続を追加し、タイプでAmazon S3 v2を選択します。 ランタイム環境ではSource RoleがアタッチされているSecureAgent環境を選択し、IAM Role ARN:にTarget AccountのIAM RoleのARNを入力します。 Use EC2 Role to Assume Roleにチェックを入れ、Folder Pathには対向のバケット名を入れておきRegionは必要に応じて変更します。
正しく設定されていれば、テスト接続が成功し、異なるAWSアカウントのS3バケットにアクセスが可能となります。
結論
このように設定することでSecureAgentが入っているEC2のAWSアカウントとは異なるAWSアカウントにAssume RoleしてS3にアクセスすることができます。
AccessKeyID / SecretAccessKey の組み合わせによるアクセス自体は非常に容易ではありますが、逆に漏洩時の影響や対応等を考えると、異なるAWS アカウントへのアクセスはなおさらAssume Roleを用いたアクセスで行いたいものです。